package com.ssm.juc.thread;

/**
 * 线程状态
 */
public class ThreadState implements Runnable {

    public synchronized void waitForASecond() throws InterruptedException {
        // 使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法
        wait(500);
    }

    public synchronized void waitForYears() throws InterruptedException {
        // 使当前线程永久等待，直到其他线程调用notify()或notifyAll()方法
        wait();
    }

    public synchronized void notifyNow() throws InterruptedException {
        //唤醒由调用wait()方法进入等待状态的线程
        notify();
        //留时间打印
        Thread.sleep(100);
    }

    public synchronized void blocking() {
        //System.out.println("blocking invoke!");
        //停留100毫秒
        sleep(200);
    }

    @Override
    public void run() {
        try {
            // 在新线程中运行waitForASecond()方法
            waitForASecond();
            // 在新线程中运行waitForYears()方法
            waitForYears();
            // 在新线程中运行blocking()方法
            Thread.sleep(200);
            // 在新线程中运行blocking()方法
            blocking();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private void sleep(int time) {
        long startTime = System.currentTimeMillis();
        for (; ; ) {
            long nowTime = System.currentTimeMillis();
            if (nowTime - startTime > time) {
                break;
            }
        }
    }
}